package AccionBoton;

import java.awt.Cursor;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import java.util.List;

import modelUtil.Util;
import plantilla.BotonTO;
import util.BotonPersonalizado;
import util.TecladoPreview;

public class AccionSoltarBoton implements MouseListener{

	private TecladoPreview _teclado;
	private int fila;
	private int columna;
	private int filasOcupa;
	private int columnasOcupa;
	
	
	
	public AccionSoltarBoton(TecladoPreview teclado){
		
		_teclado = teclado;
		
	}
	
	
	public void mouseClicked(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	public void mouseEntered(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	public void mouseExited(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	public void mousePressed(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	public void mouseReleased(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
		
		if(_teclado.getArrastrando()){
			

			
			Point destino = arg0.getPoint();
			Point origen = _teclado.getOrigen();
			fila = new Integer(_teclado.getBotonArrastrado().getBotonInfo().getPosicionFila()).intValue();
			columna = new Integer(_teclado.getBotonArrastrado().getBotonInfo().getPosicionColumna()).intValue();
			filasOcupa = new Integer(_teclado.getBotonArrastrado().getBotonInfo().getFilasOcupa()).intValue();
			columnasOcupa = new Integer(_teclado.getBotonArrastrado().getBotonInfo().getColumnasOcupa()).intValue();


			if(destino.getX()>(origen.getX()+30)){
			

				arrastrarHorizontal();
			
			}
			
			
			
			if(destino.getY()>(origen.getY()+30)){

				
				arrastrarVertical();

			}
			
			if(destino.getY()<(origen.getY()-30)){

				if(fila>0){

				arrastrarArriba();
				
				}
		
			}
			
			if(destino.getX()<(origen.getX()-30)){

				if(columna>0){

				arrastrarIzquierda();
				
				}
		
			}
			
			
			_teclado.getBotonArrastrado().setCursor(new Cursor(Cursor.DEFAULT_CURSOR));

			_teclado.setArrastrando(false);
			_teclado.setBotonArrastrado(null);
			
		
		
	}

	}
	
	public void arrastrarHorizontal(){
		
		int puedoMeter = 0;
		List<Integer> indices = new ArrayList();
		
		for(int i=0; i<filasOcupa;i++){
			
			for(int j=0;j<_teclado.get_botonesEliminados().size();j++){
				
				if((_teclado.get_botonesEliminados().get(j).getColumna()==columna+columnasOcupa)&&(_teclado.get_botonesEliminados().get(j).getFila()==fila+i)){
					puedoMeter++;
					indices.add(j);
				}
								
			}
						
		}
		
		if(puedoMeter==filasOcupa){
			int eliminado = 0;
			
			for(int i = 0; i< indices.size();i++){
				
				_teclado.get_botonesEliminados().remove(indices.get(i)-eliminado);
				eliminado++;

				
			}
			
			BotonPersonalizado aux = Util.BotonImagen((BotonTO)_teclado.getBotonArrastrado().getBotonInfo().Clone());


			_teclado.get_plantilla().getListaBotones().remove(_teclado.getBotonArrastrado().getBotonInfo());

			_teclado.getBotonArrastrado().getBotonInfo().setColumnasOcupa(new Integer(columnasOcupa + 1).toString());
			columnasOcupa++;
			_teclado.get_plantilla().getListaBotones().add(_teclado.getBotonArrastrado().getBotonInfo());
			_teclado.set_plantilla(_teclado.get_plantilla());
			
		}
		
		_teclado.get_frame().setGuardado(false);
		
	}
	
	public void arrastrarIzquierda(){
		
		int puedoMeter = 0;
		List<Integer> indices = new ArrayList();

		
		for(int i=0; i<filasOcupa;i++){
			
			for(int j=0;j<_teclado.get_botonesEliminados().size();j++){
				
				if((_teclado.get_botonesEliminados().get(j).getColumna()==columna-1)&&(_teclado.get_botonesEliminados().get(j).getFila()==fila+i)){
					puedoMeter++;
					indices.add(j);

					
				}
								
			}
						
		}
		
		if(puedoMeter==filasOcupa){
			
			int eliminado = 0;
			
			for(int i = 0; i< indices.size();i++){
				
				_teclado.get_botonesEliminados().remove(indices.get(i)-eliminado);
				eliminado++;

				
			}
			
			//_teclado.get_botonesEliminados().remove(i);
			_teclado.get_plantilla().getListaBotones().remove(_teclado.getBotonArrastrado().getBotonInfo());
			_teclado.getBotonArrastrado().getBotonInfo().setColumnasOcupa(new Integer(columnasOcupa + 1).toString());
			_teclado.getBotonArrastrado().getBotonInfo().setPosicionColumna(new Integer(columna-1).toString());

			columnasOcupa++;
			_teclado.get_plantilla().getListaBotones().add(_teclado.getBotonArrastrado().getBotonInfo());
			_teclado.set_plantilla(_teclado.get_plantilla());
			
		}
		
		_teclado.get_frame().setGuardado(false);

		
	}
	
	
public void arrastrarVertical(){
		
		int puedoMeter = 0;
		List<Integer> indices = new ArrayList();

		
		for(int i=0; i<columnasOcupa;i++){
			
			for(int j=0;j<_teclado.get_botonesEliminados().size();j++){
				
				if((_teclado.get_botonesEliminados().get(j).getFila()==fila+filasOcupa)&&(_teclado.get_botonesEliminados().get(j).getColumna()==columna+i)){
					puedoMeter++;
					indices.add(j);

					
				}
								
			}
						
		}
		
		if(puedoMeter==columnasOcupa){
			
			int eliminado = 0;
			
			for(int i = 0; i< indices.size();i++){
				
				_teclado.get_botonesEliminados().remove(indices.get(i)-eliminado);
				eliminado++;

				
			}
			
			//_teclado.get_botonesEliminados().remove(i);
			_teclado.get_plantilla().getListaBotones().remove(_teclado.getBotonArrastrado().getBotonInfo());
			_teclado.getBotonArrastrado().getBotonInfo().setFilasOcupa(new Integer(filasOcupa + 1).toString());
			filasOcupa++;
			_teclado.get_plantilla().getListaBotones().add(_teclado.getBotonArrastrado().getBotonInfo());
			_teclado.set_plantilla(_teclado.get_plantilla());
			
		}
		
		_teclado.get_frame().setGuardado(false);

	}

public void arrastrarArriba(){
	
	int puedoMeter = 0;
	List<Integer> indices = new ArrayList();

	
	for(int i=0; i<columnasOcupa;i++){
		
		for(int j=0;j<_teclado.get_botonesEliminados().size();j++){
			
			if((_teclado.get_botonesEliminados().get(j).getFila()==fila-1)&&(_teclado.get_botonesEliminados().get(j).getColumna()==columna+i)){
				puedoMeter++;
				indices.add(j);

				
			}
							
		}
					
	}
	
	if(puedoMeter==columnasOcupa){
		
		int eliminado = 0;
		
		for(int i = 0; i< indices.size();i++){
			
			_teclado.get_botonesEliminados().remove(indices.get(i)-eliminado);
			eliminado++;

			
		}
		
		
		//_teclado.get_botonesEliminados().remove(i);
		_teclado.get_plantilla().getListaBotones().remove(_teclado.getBotonArrastrado().getBotonInfo());
		_teclado.getBotonArrastrado().getBotonInfo().setFilasOcupa(new Integer(filasOcupa + 1).toString());
		_teclado.getBotonArrastrado().getBotonInfo().setPosicionFila(new Integer(fila-1).toString());
		filasOcupa++;
		_teclado.get_plantilla().getListaBotones().add(_teclado.getBotonArrastrado().getBotonInfo());
		_teclado.set_plantilla(_teclado.get_plantilla());
		
	}
	_teclado.get_frame().setGuardado(false);

	
}

}
